﻿/*
 * 程序说明:
 * 首先考虑的是通过数据类型和设计适当的函数来处理数据.然后将这些函数组合成一个程序
 * 有时也称为自下而上的程序设计(bottom-up programming),因为设计过程从组件到整体进行.
 * 这种办法非常适合于OOP--它首先强调的是数据表示和操纵.
 * 传统的过程性编程倾向于从上而下的程序设计(top-dowm programming),首先指定模块化设计方案,然后再研究细节.
 * 两种方法都很有用,最终的产品都是模块化程序
 *
*/
#include<iostream>
const int Max =5;
//function prototypes
int fill_array(double ar[],int limit);
void show_array(const double ar[],int n);
void revalue(double r,double ar[],int n);

int main()
{
    using namespace std;
    double properties[Max];

    int size = fill_array(properties,Max);
    show_array(properties,size);

    if(size > 0)
    {
        cout << "Enter revaluation factor: ";
        double factor;
        while(!(cin>>factor))
        {
            cin.clear();
            while(cin.get()!='\n')
                continue;
            cout << "Bad input ;Please enter a number: ";
        }
        revalue(factor,properties,size);
        show_array(properties,size);
    }
    cout << "Done.\n";
    cin.get();
    cin.get();
    return 0;
}

int fill_array(double ar[],int limit)
{
    using namespace std;
    double temp;
    int i;
    for(i = 0;i < limit;i++)
    {
        cout << "Enter value #"<<(i+1)<<": ";
        cin>>temp;
        if(!cin)
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout << "Bad input; input process terminated.\n";
            break;
        }
        else if (temp < 0)
            break;
        ar[i] = temp;
    }
    return i;
}

void show_array(const double ar[],int n)
{
    using namespace std;
    for(int i=0;i<n;i++)
    {
        cout << "Property #"<<(i+1)<<": $";
        cout <<ar[i]<<endl;
    }
}

void revalue(double r,double ar[],int n)
{
    for(int i = 0;i<n;i++)
    {
        ar[i] *= r;
    }
}
